# AI 聊天助手

AI 聊天助手允许用户与 AI 助手进行实时交互，在文档编辑过程中获取智能建议和帮助。

## 效果截图

![AI 聊天助手](https://s2.umodoc.com/demos/ai-chat-cn.png)

## 特点及优势

- 支持私有化部署，您可以通过私有化部署，实现数据的安全性和可控性；
- 相比于 AI 文档助手更友好的操作体验和非侵入式的聊天工具设计；
- 支持多轮对话，您可以在多轮对话中，获取更准确的智能建议；
- 支持自定义多个 AI 模型，您可以自定义多个 AI 模型，实现自定义 AI 模型的切换和使用；
- 支持推理模式，对于支持推理模式的 AI 模型，您可以配置推理模式，实现推理模式展示；
- 支持历史消息记录，您可以在聊天记录中查看历史消息，实现消息的查看和管理；
- 支持文件上传，您可以配置文件上传，实现向 AI 模型上传文件，以便于为 AI 模型提供更丰富的上下文信息。

## 默认配置

``` js
const systemPrompt = `**角色定位**
你是一个专业文档 AI 助手，具备以下核心能力：
1. 精准解析用户碎片化需求
2. 上下文敏感的内容整合
3. 多维度文档质量把控
4. Markdown语法专家级应用

**任务说明**
当前用户正在富文本编辑器(基于 Tiptap 和 ProseMirror 开发)中进行文档创作，你需要完成以下协同工作流程：

**输入分析阶段**
1. 深度理解用户提供的上下文片段（即用户所选择的内容）：{context}
2. 通读当前完整文档：
\`\`\`html
{document}
\`\`\`
3. 确认目标语言要求：{lang}（需确保语法地道性）
4. 识别用户未明示的潜在需求：
   - 格式一致性检查
   - 逻辑连贯性增强
   - 术语统一性维护

**输出规范**
请按以下标准生成内容：
▢ 格式标准：
   - 严格使用基础Markdown语法，但不能将内容整个返回成代码块
   - 标题层级不超过### 
   - 列表项采用标准符号
   - 代码块标注语言类型

▢ 内容标准：
   - 保持与现有文档风格统一
   - 新增内容自然衔接上下文
   - 重要信息优先呈现原则
   - 技术文档需保持术语准确

**异常处理机制**
当遇到以下情况时：
1. 需求存在歧义
2. 上下文信息不足
3. 发现文档内在矛盾
请主动询问澄清：
"为确保输出质量，需要您确认以下细节：[具体问题] 请提供补充说明/示例/偏好要求"

**执行示例**
[用户需求] "在第三章添加数据可视化注意事项"
[AI响应] 
1. 定位第三章现有内容
2. 分析文档中已有的图表规范
3. 生成符合整体风格的注意事项列表
4. 使用与前后文匹配的过渡语句

只需要返回结果，不要将结果放在代码块中，无需其他任何额外说明，除非用户要求，返回内容尽量不要太过复杂。
`

const welcomeMessage =
  '欢迎使用 Umo Editor AI 聊天助手！有什么问题可以问我哦，我会尽力帮助您完成文档编辑工作。'

// AI 聊天助手相关配置
const defaultOptions = {
  ai: {
    chat: {
      enabled: false,
      layout: 'both',
      showName: true,
      showDatetime: true,
      showAvatar: true,
      commands: [
        {
          label: { en_US: 'Continuation', zh_CN: '续写' },
          value: { en_US: 'Continuation', zh_CN: '续写' },
        },
        {
          label: { en_US: 'Rewrite', zh_CN: '重写' },
          value: { en_US: 'Rewrite', zh_CN: '重写' },
        },
        {
          label: { en_US: 'Abbreviation', zh_CN: '缩写' },
          value: { en_US: 'Abbreviation', zh_CN: '缩写' },
        },
        {
          label: { en_US: 'Expansion', zh_CN: '扩写' },
          value: { en_US: 'Expansion', zh_CN: '扩写' },
        },
        {
          label: { en_US: 'Polish', zh_CN: '润色' },
          value: { en_US: 'Polish', zh_CN: '润色' },
        },
        {
          label: { en_US: 'Proofread', zh_CN: '校阅' },
          value: { en_US: 'Proofread', zh_CN: '校阅' },
        },
        {
          label: { en_US: 'Translate', zh_CN: '翻译' },
          value: {
            en_US: 'Translate to chinese',
            zh_CN: '翻译成英文'
          },
        },
      ],
      models: [],
      systemPrompt,
      welcomeMessage,
      maxHistory: 10,
      async onGetHistory() {
      },
      async onChangeHistory(type, data) {
      }
    },
}
```

## 配置说明

### ai.chat
AI 聊天助手相关配置，更多信息见[AI 文档助手](../editor/ai)。

- `ai.chat.enabled`，Boolean，是否启用 AI 助手。
- `ai.chat.layout`，String，AI 文档助手的消息布局方式，支持 `both`、`single` 两种布局方式，默认为 `both`。
- `ai.chat.showName`，Boolean，是否显示消息名称，默认为 `true`。
- `ai.chat.showDatetime`，Boolean，是否显示消息时间，默认为 `true`。
- `ai.chat.showAvatar`，Boolean，是否显示消息头像，默认为 `true`。
- `ai.chat.commands`，Array，常用指令，可参考[AI 文档助手配置](../editor/options/ai#aiassistantcommands)。。
- `ai.chat.systemPrompt`， String，系统提示词，用于让 AI 更好地理解任务和角色。
- `ai.chat.welcomeMessage`， String，欢迎消息，用于打开 AI 聊天助手时，显示欢迎信息，为空则不显示欢迎信息。
- `ai.chat.maxHistory`， Number，AI 聊天助手的历史消息数量。
- `ai.chat.onGetHistory`，AsyncFunction，获取历史消息的回调函数，可通过该回调从服务器端获取历史消息。
- `ai.chat.onChangeHistory`，AsyncFunction，更新历史消息的回调函数，可通过该回调更新服务器端的历史消息，如删除、添加等。
- `ai.chat.models`， Array，AI 助手的模型配置，支持多种模型，请至少配置一项，具体配置项见下表。

| 配置项 | 类型 | 描述 |
| --- | --- | --- |
| `isDefault`| Boolean | 是否是默认模型 |
| `label`| String | 模型名称，在消息列表中显示 |
| `value` | String | 模型值，传递给的后端的实际值 |
| `avatar` | URL | 模型头像的 URL，在消息列表中显示|
| `provider` | URL | AI 服务提供商，即 AI 模型所需要请求的接口地址 |
| `withToken` | Boolean | 请求时是否在 header 中携带 token |
| `supportReason` | Boolean | 该模型是否支持推理模式 |
| `file` | Object | 上传文件配置，支持 `accept`、`multiple`、`maxSize`、`limit` 等属性 |

**示例**：
```js
[
  // DeepSeek
  {
    label: 'DeepSeek-R1',
    value: 'deepseek-reasoner',
    avatar: '...',
    isDefault: true,
    // 本示例中使用 Umo Editor Server 来代理 AI 请求到其他 AI 服务提供商，您也可以自定义 provider
    provider: 'http://127.0.0.1:1235/ai/deepseek/chat%2Fcompletions',
    withToken: true,
    supportReason: true,
    file: {
      accept: '.docx,.doc,.xls,.xlsx,.txt', // 支持的文件类型
      multiple: true, // 是否允许多选
      maxSize: 1024 * 1024 * 5, // 单个文件最大大小
      limit: 5, // 最多上传文件数量
    },
  },
  // Moonshot AI
  {
    label: 'Moonshot AI',
    value: 'moonshot-v1-8k',
    avatar: kimiLogo,
    provider: 'http://127.0.0.1:1235/ai/moonshot/chat%2Fcompletions',
    withToken: true,
  },
]
```

## 方法列表

### openAIChat

**说明**：打开 AI 聊天助手。

**参数**：无

**返回值**：无

### closeAIChat

**说明**：关闭 AI 聊天助手。

**参数**：无

**返回值**：无

